#
# Default types for WPP
#

# our basic arithmetic types

DEFINE_SIMPLE_TYPE( SBYTE,  signed char,    ItemChar,  "d");
DEFINE_SIMPLE_TYPE( SSHORT, signed short,   ItemShort, "hd");
DEFINE_SIMPLE_TYPE( SINT,   signed int,     ItemInt,   "d");
DEFINE_SIMPLE_TYPE( SLONG,  signed long,    ItemLong,  "ld");
DEFINE_SIMPLE_TYPE( SINT64, signed _int64,  ItemLongLong,  "I64d");

DEFINE_FLAVOR( UCHAR,   SBYTE, ItemUChar, "c" );
DEFINE_FLAVOR( SCHAR,   SBYTE, ItemChar,  "c" );
DEFINE_FLAVOR( BOOLEAN, SBYTE, ItemListByte(FALSE,TRUE), "s");

# arch dependent types

DEFINE_SIMPLE_TYPE( SLONGPTR,  void*,     ItemPtr,  "p");
DEFINE_SIMPLE_TYPE( PTR,       void*,     ItemPtr,  "p");
DEFINE_SIMPLE_TYPE( HANDLE,    void*,     ItemPtr,  "p");

# all strings require custom processing

DEFINE_CPLX_TYPE(ASTR, WPP_LOGASTR, ItemString,   "s");
DEFINE_CPLX_TYPE(ARSTR, WPP_LOGASTR, ItemRString,  "s");
DEFINE_CPLX_TYPE(WSTR, WPP_LOGWSTR, ItemWString,  "s");
DEFINE_CPLX_TYPE(CSTR, WPP_LOGCSTR, ItemPString,  "s");
DEFINE_CPLX_TYPE(USTR, WPP_LOGUSTR, ItemPWString, "s");

# default formats for those who don't care to provide their own strings

DEFINE_FLAVOR(UBYTE, SBYTE,, "u");
DEFINE_FLAVOR(XBYTE, SBYTE,, "02x");
DEFINE_FLAVOR(OBYTE, SBYTE,, "o");

DEFINE_FLAVOR(USHORT, SSHORT, ItemUShort, "hu");
DEFINE_FLAVOR(XSHORT, SSHORT,, "04hX");
DEFINE_FLAVOR(OSHORT, SSHORT,, "ho");

DEFINE_FLAVOR(UINT, SINT, ItemUInt, "u");
DEFINE_FLAVOR(XINT, SINT,, "08x");
DEFINE_FLAVOR(OINT, SINT,, "o");

DEFINE_FLAVOR(ULONG, SLONG, ItemULong, "lu");
DEFINE_FLAVOR(XLONG, SLONG,, "08lX");
DEFINE_FLAVOR(OLONG, SLONG,, "lo");

DEFINE_FLAVOR(UINT64, SINT64,, "i64u");
DEFINE_FLAVOR(XINT64, SINT64,, "08i64X");
DEFINE_FLAVOR(OINT64, SINT64,, "i64o");

DEFINE_FLAVOR(ULONGPTR, SLONGPTR,,); 
DEFINE_FLAVOR(XLONGPTR, SLONGPTR,,);
DEFINE_FLAVOR(OLONGPTR, SLONGPTR,,);

# special formats

DEFINE_FLAVOR(IPADDR,    UINT,   ItemIPAddr,   "s");
DEFINE_FLAVOR(PORT,      USHORT, ItemPort,     "s");
DEFINE_FLAVOR(STATUS,    UINT,   ItemNTSTATUS, "s");
DEFINE_FLAVOR(WINERROR,  UINT,   ItemWINERROR, "s");
DEFINE_FLAVOR(PORT,      USHORT, ItemPort,     "s");
DEFINE_SIMPLE_TYPE(GUID, GUID,   ItemGuid, "s");

# time related stuff 

DEFINE_FLAVOR(TIMESTAMP, SINT64, ItemTimestamp, "s");
DEFINE_FLAVOR(TIME,      SINT64, ItemTimestamp, "s");
DEFINE_FLAVOR(DATE,      SINT64, ItemTimestamp, "s");
DEFINE_FLAVOR(WAITTIME,  SINT64, ItemTimestamp, "s");
DEFINE_FLAVOR(TIMEDELTA, SINT64, ItemTimestamp, "s");

# enumeration types

DEFINE_FLAVOR(ItemListByte,  SBYTE, ItemListByte, "s");
DEFINE_FLAVOR(ItemListShort, SSHORT, ItemListShort,"s");
DEFINE_FLAVOR(ItemListLong,  SLONG, ItemListLong, "s");

CUSTOM_TYPE(IRQL,    ItemListByte(Low,APC,DPC) );

CUSTOM_TYPE(PNPMN,   ItemListByte(IRP_MN_START_DEVICE,IRP_MN_QUERY_REMOVE_DEVICE,IRP_MN_REMOVE_DEVICE,IRP_MN_CANCEL_REMOVE_DEVICE,IRP_MN_STOP_DEVICE,IRP_MN_QUERY_STOP_DEVICE,IRP_MN_CANCEL_STOP_DEVICE,IRP_MN_QUERY_DEVICE_RELATIONS,IRP_MN_QUERY_INTERFACE,IRP_MN_QUERY_CAPABILITIES,IRP_MN_QUERY_RESOURCES,IRP_MN_QUERY_RESOURCE_REQUIREMENTS,IRP_MN_QUERY_DEVICE_TEXT,IRP_MN_FILTER_RESOURCE_REQUIREMENTS,IRP_MN_PNP_14,IRP_MN_READ_CONFIG,IRP_MN_WRITE_CONFIG,IRP_MN_EJECT,IRP_MN_SET_LOCK,IRP_MN_QUERY_ID,IRP_MN_QUERY_PNP_DEVICE_STATE,IRP_MN_QUERY_BUS_INFORMATION,IRP_MN_DEVICE_USAGE_NOTIFICATION,IRP_MN_SURPRISE_REMOVAL) );

# default tracing macro

SimpleTrace(MSG,ARG);
SimpleTraceEx(GRP,MSG,ARG);

USEPREFIX(*, "[%9!x!].%3!03x!::%4 [%1] ");